// APIfox自动化测试脚本
// 1. 先使用admin/admin登录获取token
// 2. 使用token测试其他接口

const axios = require('axios');

// 配置基础URL
const BASE_URL = 'http://localhost:8000/api/v1';

// 存储token的变量
let authToken = null;

// 登录函数
async function login() {
    try {
        console.log('正在登录...');
        const response = await axios.post(`${BASE_URL}/auth/login`, {
            username: 'admin',
            password: 'admin'
        });
        
        if (response.data.code === 200) {
            authToken = response.data.data.access_token;
            console.log('登录成功，获取到token:', authToken);
            return authToken;
        } else {
            console.error('登录失败:', response.data.message);
            return null;
        }
    } catch (error) {
        console.error('登录请求出错:', error.message);
        return null;
    }
}

// 测试需要认证的接口
async function testAuthenticatedAPIs(token) {
    const config = {
        headers: {
            'Authorization': `Bearer ${token}`
        }
    };
    
    // 测试获取用户信息
    try {
        console.log('\n--- 测试获取用户信息 ---');
        const userInfoResponse = await axios.get(`${BASE_URL}/auth/userinfo`, config);
        console.log('获取用户信息成功:', userInfoResponse.data);
    } catch (error) {
        console.error('获取用户信息失败:', error.message);
    }
    
    // 测试用户管理接口
    try {
        console.log('\n--- 测试获取用户列表 ---');
        const usersResponse = await axios.get(`${BASE_URL}/users/list`, config);
        console.log('获取用户列表成功:', usersResponse.data);
    } catch (error) {
        console.error('获取用户列表失败:', error.message);
    }
    
    // 测试学生管理接口
    try {
        console.log('\n--- 测试获取学生列表 ---');
        const studentsResponse = await axios.get(`${BASE_URL}/students/list`, config);
        console.log('获取学生列表成功:', studentsResponse.data);
    } catch (error) {
        console.error('获取学生列表失败:', error.message);
    }
    
    // 测试教师管理接口
    try {
        console.log('\n--- 测试获取教师列表 ---');
        const teachersResponse = await axios.get(`${BASE_URL}/teachers/list`, config);
        console.log('获取教师列表成功:', teachersResponse.data);
    } catch (error) {
        console.error('获取教师列表失败:', error.message);
    }
    
    // 测试教室管理接口
    try {
        console.log('\n--- 测试获取教室列表 ---');
        const classroomsResponse = await axios.get(`${BASE_URL}/classrooms/list`, config);
        console.log('获取教室列表成功:', classroomsResponse.data);
    } catch (error) {
        console.error('获取教室列表失败:', error.message);
    }
    
    // 测试课程管理接口
    try {
        console.log('\n--- 测试获取课程列表 ---');
        const coursesResponse = await axios.get(`${BASE_URL}/courses/list`, config);
        console.log('获取课程列表成功:', coursesResponse.data);
    } catch (error) {
        console.error('获取课程列表失败:', error.message);
    }
    
    // 测试学年管理接口
    try {
        console.log('\n--- 测试获取学年列表 ---');
        const academicYearsResponse = await axios.get(`${BASE_URL}/academic-years/list`, config);
        console.log('获取学年列表成功:', academicYearsResponse.data);
    } catch (error) {
        console.error('获取学年列表失败:', error.message);
    }
    
    // 测试班级管理接口
    try {
        console.log('\n--- 测试获取班级列表 ---');
        const classesResponse = await axios.get(`${BASE_URL}/classes/list`, config);
        console.log('获取班级列表成功:', classesResponse.data);
    } catch (error) {
        console.error('获取班级列表失败:', error.message);
    }
    
    // 测试班级学生管理接口
    try {
        console.log('\n--- 测试获取班级学生列表 ---');
        const classStudentsResponse = await axios.get(`${BASE_URL}/class-students/list`, config);
        console.log('获取班级学生列表成功:', classStudentsResponse.data);
    } catch (error) {
        console.error('获取班级学生列表失败:', error.message);
    }
    
    // 测试角色管理接口
    try {
        console.log('\n--- 测试获取角色列表 ---');
        const rolesResponse = await axios.get(`${BASE_URL}/roles/list`, config);
        console.log('获取角色列表成功:', rolesResponse.data);
    } catch (error) {
        console.error('获取角色列表失败:', error.message);
    }
    
    // 测试用户角色管理接口
    try {
        console.log('\n--- 测试获取用户角色列表 ---');
        const userRolesResponse = await axios.get(`${BASE_URL}/user-roles/list`, config);
        console.log('获取用户角色列表成功:', userRolesResponse.data);
    } catch (error) {
        console.error('获取用户角色列表失败:', error.message);
    }
    
    // 测试权限管理接口
    try {
        console.log('\n--- 测试获取权限列表 ---');
        const permissionsResponse = await axios.get(`${BASE_URL}/permissions/list`, config);
        console.log('获取权限列表成功:', permissionsResponse.data);
    } catch (error) {
        console.error('获取权限列表失败:', error.message);
    }
    
    // 测试角色权限管理接口
    try {
        console.log('\n--- 测试获取角色权限列表 ---');
        const rolePermissionsResponse = await axios.get(`${BASE_URL}/role-permissions/list`, config);
        console.log('获取角色权限列表成功:', rolePermissionsResponse.data);
    } catch (error) {
        console.error('获取角色权限列表失败:', error.message);
    }
}

// 主函数
async function main() {
    console.log('开始API测试...');
    
    // 第一步：登录获取token
    const token = await login();
    
    if (token) {
        // 第二步：使用token测试其他接口
        await testAuthenticatedAPIs(token);
    } else {
        console.log('无法获取token，结束测试');
    }
    
    console.log('\nAPI测试结束');
}

// 执行主函数
main();